package sge.data;

import java.util.ArrayList;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;

import sge.beans.Instituicao;

public class InstituicaoDAO {

	private static InstituicaoDAO dao;

	private InstituicaoDAO() {
	}

	public static InstituicaoDAO obterInstituicaoDAO() {
		if (dao == null) {
			dao = new InstituicaoDAO();
		}
		return dao;
	}

	public void inserirInstituicao(Instituicao instituicao) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			pm.makePersistent(instituicao);
		} finally {
			pm.close();
		}
	}

	public Instituicao getInstituicao(String nome) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Instituicao instituicao;
		try {
			instituicao = pm.getObjectById(Instituicao.class, nome);
		} finally {
			pm.close();
		}
		return instituicao;
	}

	@SuppressWarnings("unchecked")
	public List<Instituicao> todasInstituicoes() {
		List<Instituicao> lista = new ArrayList<Instituicao>();
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			Query query = pm.newQuery(Instituicao.class);
			lista.addAll((List<Instituicao>) query.execute());
		} finally {
			pm.close();
		}
		return lista;
	}

	@SuppressWarnings("unchecked")
	public Instituicao buscarInstituicao(String instituicao) {
		List<Instituicao> lista = new ArrayList<Instituicao>();
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			Query query = pm.newQuery(Instituicao.class);
			lista.addAll((List<Instituicao>) query.execute());
		} finally {
			pm.close();
		}
		for (int i = 0; i < lista.size(); i++) {
			if (lista.get(i).getNome().equalsIgnoreCase(instituicao)) {
				return lista.get(i);
			}
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public Long buscarIDInstituicao(String instituicao) {
		List<Instituicao> lista = new ArrayList<Instituicao>();
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			Query query = pm.newQuery(Instituicao.class);
			lista.addAll((List<Instituicao>) query.execute());
		} finally {
			pm.close();
		}
		for (int i = 0; i < lista.size(); i++) {
			if (lista.get(i).getNome().equalsIgnoreCase(instituicao)) {
				return lista.get(i).getIDInstituicao();
			}
		}
		return null;
	}
}
